home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok03.lha / IFFLoad_1.1 / IFFLoad.def < prev    next >
Text File  |  1993-08-15  |  7KB  |  173 lines

  1. (*---------------------------------------------------------------------------
  2.     :Program.    IFFLoad.mod
  3.     :Author.     Fridtjof Siebert
  4.     :Address.    Nobileweg 67, D-7-Stgt-40
  5.     :Phone.      0711/822509
  6.     :Shortcut.   [fbs]
  7.     :Version.    .01
  8.     :Date.       19-May-88
  9.     :Copyright.  PD
  10.     :Language.   Modula-II
  11.     :Translator. M2Amiga
  12.     :Imports.    none.
  13.     :UpDate.     none.
  14.     :Contents.   Ladeprocedure für ILBM (IFF)-Bilder.
  15. ---------------------------------------------------------------------------*)
  16. DEFINITION MODULE IFFLoad;
  17.  
  18. FROM Intuition IMPORT ScreenPtr,NewScreen,WindowPtr,NewWindow;
  19. FROM Exec IMPORT UByte;
  20.  
  21. (*---------------------------  Types:  ------------------------------------*)
  22.  
  23. TYPE
  24.   IFFTitles = (BMHD,CMAP,GRAB,DEST,CAMG,CRNG,BODY,SPRT,CCRT,CMHD,DPPV);
  25.   IFFTitleSet = SET OF IFFTitles;
  26. (* SPRT,CCRT,CMHD,DPPV not implemented !!!                                 *)
  27.  
  28.   ViewTypes = (vt0,Ersy,Lace,LPen,vt4,vt5,vt6,vt7,Gaud,Color,DblPF,HoMod,
  29.                vt12,vt13,vt14,Hires,v16);
  30.   ViewTypeSet = SET OF ViewTypes;
  31. (* which ViewModes are selected *)
  32.  
  33. TYPE
  34.  
  35. (*-------------  The Structure that keeps all the data:  ------------------*)
  36. (* You don't have to understand all variables in this structure! Only some *)
  37. (* are important, like BMHD.width/height or CMAP.red[] etc. The other data *)
  38. (* is used by the Routines that are exported from this module,like DoCycle *)
  39. (* etc.                                                                    *)
  40.  
  41.   IFFInfoTypePtr = POINTER TO IFFInfoType;
  42.   IFFInfoType = RECORD
  43.   (* This contains all Data needed for a Picture *)
  44.  
  45. (*------  Which Data is availble:  ------*)
  46.     IFFTitle: IFFTitleSet;     (* all Sub-Records, whose equally named Flag*)
  47. (* is set here, contain readable data                                      *)
  48.  
  49. (*------  Information on BitMap:  ------*)
  50.     BMHD: RECORD
  51.  
  52.       width,height: INTEGER;   (* the Picture's Size                       *)
  53.       depth: UByte;            (* it's Depth (how many BitPlanes)          *)
  54.       left,top: INTEGER;       (* it's Location                            *)
  55.       masking: UByte;          (* Masking (see Documentation)              *)
  56.       transCol: INTEGER;       (* Transparent Color                        *)
  57.       xAspect,yAspect: UByte;  (* Verzerrung                               *)
  58.       scrnWidth,scrnHeight: INTEGER; (* The Image's Screen's Size          *)
  59.     END;
  60.  
  61. (*------  Information on Colors:  ------*)
  62.     CMAP: RECORD
  63.  
  64.       colorCnt: CARDINAL;      (* Number of Colors used                    *)
  65.       red,green,blue:   ARRAY[0..63] OF UByte;
  66.        (* the Colors (I hope for 6 Bitplanes to be possible anytime)       *)
  67.     END;
  68.  
  69. (*------  Information on HotSpot:  ------*)
  70.     GRAB: RECORD
  71.  
  72.       hotX,hotY: INTEGER;      (* Hot-Spot of this Image (if exists        *)
  73.     END;
  74.  
  75. (*------  Information on Destination-Bitmap:  ------*)
  76.     DEST: RECORD
  77.       depth: UByte;            (* number of Planes                         *)
  78.       planePick: CARDINAL;
  79.       planeOnOff: CARDINAL;    (* set or clear other Planes ?              *)
  80.       planeMask: CARDINAL;     (* planes to be changed                     *)
  81.     END;
  82.  
  83. (*------  Information on any Special ViewMode:  ------*)
  84.     CAMG: RECORD
  85.       viewType: ViewTypeSet;   (* ViewMode                                 *)
  86.     END;
  87.  
  88. (*------  Information on ColorCycling:  ------*)
  89.     CRNG: RECORD
  90.       count: CARDINAL;         (* Number of ColorCyclings                  *)
  91.       data: ARRAY[0..15] OF RECORD
  92.  
  93.         rate: INTEGER;         (* velocity, 800H is 60 per second          *)
  94.         on: BOOLEAN;           (* decide, wether CRNG is active or not     *)
  95.         forward: BOOLEAN;      (* Direction (DPaint)                       *)
  96.         low,high: UByte;       (* lower and upper Color of this Range      *)
  97.       END;
  98.     END;
  99. (*------  Internal Information:  ------*)
  100.     Internal: RECORD
  101.       CycleID: CARDINAL;       (* that's to distinguish different cyclings *)
  102.     END;
  103.   END;
  104.  
  105. (* That's been quite a complex Variable. If you wanna use it, do it this   *)
  106. (* way:                                                                    *)
  107. (* e.g. You wanna know, how Deep your Image is. Ça marche comme ça:        *)
  108. (* MyDepth := IFFInfo.BMHD.depth;                                          *)
  109. (* You can get the speed of the second Colorcycle this way:                *)
  110. (* speed := IFFInfo.CRNG.data[2].rate;                                     *)
  111.  
  112. (*--------------  That's the Variable, that contains all Data  ------------*)
  113. (* this should be imported to your Module to get the Data. Don't forget to *)
  114. (* save the data, e.g. to a variable of the same type. Everytime you load  *)
  115. (* a new IFF-File, the data is scratched !!! (i.e. the new data is written *)
  116. (* into this structure.)                                                   *)
  117.  
  118. VAR
  119.   IFFInfo: IFFInfoType;
  120.  
  121. (*--------------------  The NewScreen-Structure.  -------------------------*)
  122. (* this can be used to open the Screen, if dontopen is specified           *)
  123.  
  124. VAR
  125.   NuScreen: NewScreen;
  126.  
  127. (*--------------------  The NewWindow-Structure.  -------------------------*)
  128. (* this can be used to open the Window later. Don't forget to put Screen-  *)
  129. (* Ptr in NuWindow.screen !!!                                              *)
  130.  
  131. VAR
  132.   NuWindow: NewWindow;
  133.  
  134. (*-----------------  That's the Procedure:  -------------------------------*)
  135.  
  136. TYPE
  137.   ReadILBMFlags = (front,visible,dontopen,window);
  138.   ReadILBMFlagSet = SET OF ReadILBMFlags;
  139.  
  140. PROCEDURE ReadILBM(name: ARRAY OF CHAR; Flags: ReadILBMFlagSet;
  141.                    VAR Screen: ScreenPtr; VAR Window: WindowPtr): BOOLEAN;
  142. (* ReadILBM() lädt ein IFF-Bild und öffnet das geladene Bild als Screen.   *)
  143. (* Name: The IFF-Filename                                                  *)
  144. (* Flags:                                                                  *)
  145. (*  -front: decides whether Screen is first or last one while loading      *)
  146. (*  -visible: decides if display should be turned off (that's faster)      *)
  147. (*  -dontopen: avoids to open the Screen. The Returned value is NIL        *)
  148. (*  -window: if set, an Window of the same size as the Image is opened.    *)
  149. (*           So, Gadgets etc. can be added to it.                          *)
  150. (* Screen: Pointer to Screen-structure of opened Screen                    *)
  151. (* Window: Pointer to the opened Window or NIL if window isn't set.        *)
  152. (* Result: FALSE if error occured. Then there's no Screen opened.          *)
  153.  
  154. (*---------------------  Colorcycling:  -----------------------------------*)
  155.  
  156. PROCEDURE DoCycle(Info: IFFInfoTypePtr; Screen: ScreenPtr): BOOLEAN;
  157. (* this should create an interrupt, that does cycling. You needn't worry,  *)
  158. (* whether ther's cycling data or not. Don't forget to call EndCycle to    *)
  159. (* remove the Cycling-Interrupt !!!                                        *)
  160. (* if result is false, any error occured. Don't call EndCycle in this case!*)
  161.  
  162. PROCEDURE EndCycle(Info: IFFInfoTypePtr);
  163. (* remove cycling-Interrupt                                                 *)
  164.  
  165. (*
  166. PROCEDURE WriteILBM(name: ARRAY OF CHAR; Scrn: ScreenPtr; GrabX,GrabY:
  167.                     INTEGER; Cycle,Dest,: BOOLEAN; SpecialView: ViewTypeSet)
  168.                     : BOOLEAN;
  169. (* that's only a dream for a future version *)
  170. *)
  171.  
  172. END IFFLoad.
  173.